import { AxiosRequestConfig, AxiosResponse } from 'axios'

interface CcRequestInterceptors<T = AxiosResponse> {
  requestInterceptor?: (config: AxiosRequestConfig) => AxiosRequestConfig
  requestInterceptorCatch?: (error: any) => any
  // responseInterceptor?: (config: AxiosResponse) => AxiosResponse
  // src\service\request\index.ts 中单词请求的响应拦截时返回类型冲突
  // 在 2022年3月1日 09:09:10 注释上面代码，采用下面代码 - 将类型 AxiosResponse 修改为 any
  // responseInterceptor?: (config: any) => any
  responseInterceptor?: (config: T) => T
  responseInterceptorCatch?: (error: any) => any
}

interface CcRequestConfig<T = AxiosResponse> extends AxiosRequestConfig {
  interceptors?: CcRequestInterceptors<T>
  showLoading?: boolean
}

// 后端服务响应来的数据类型
// 成功则 code = 1
interface IResponseResult<T = any> {
  code: number
  msg: string
  data: T
}

export { CcRequestInterceptors, CcRequestConfig, IResponseResult }
